package com.cj.wtrails.observer

import android.annotation.SuppressLint
import com.cj.wisdom_display.utils.GpioObservable
import com.lztek.toolkit.Lztek
import io.reactivex.ObservableEmitter
import io.reactivex.ObservableOnSubscribe
import io.reactivex.Scheduler
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import java.util.*

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 *
 * Created by yi on 2020/10/29.
 */
class MyObserver : Observer {


    private lateinit var listener: MyObserverListener

    fun setListener(listener: MyObserverListener) {
        this.listener = listener
    }

    interface MyObserverListener {
        fun readValue(value: Int)
    }

    @SuppressLint("CheckResult")
    override fun update(o: Observable?, arg: Any?) {
        io.reactivex.Observable.create(ObservableOnSubscribe<Int> {
            if (o is GpioObservable) {
                it.onNext(o.getValue())
            }

        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                listener.apply {
                    readValue(it)
                }
            }


    }


}